package com.and.video.service.handler;



import com.and.video.domain.JsonResponse;
import com.and.video.domain.exception.ConditionException;
import org.springframework.core.Ordered;
import org.springframework.core.annotation.Order;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;

import javax.servlet.http.HttpServletRequest;

// 声明该类为全局异常处理器。
@ControllerAdvice
// 确保该处理器优先级最高
@Order(Ordered.HIGHEST_PRECEDENCE)
public class CommonGlobalExceptionHandler {

    // 捕获所有 Exception 及其子类异常。
    @ExceptionHandler(value = Exception.class)
    // 返回 JSON 格式响应。
    @ResponseBody
    public JsonResponse<String> commonExceptionHandler(HttpServletRequest request, Exception e){
        // 如果是自定义的 ConditionException，提取其错误码和消息。
        // 其他异常统一返回 500 错误码。
        String errorMsg = e.getMessage();
        if(e instanceof ConditionException){
            String errorCode = ((ConditionException)e).getCode();
            return new JsonResponse<>(errorCode, errorMsg);
        }else{
            return new JsonResponse<>("500",errorMsg);
        }
    }
}
